<!DOCTYPE HTML>
<html lang="zh-cn">
<head>
    <script>
        "use strict";
    var __JS_RETRY__ = {};

    function __rpReport(data) {
        var BADJS_LEVEL = 2;
        setTimeout(function () {
            if (window.imlog && window.imlog.default) {
                data.ext.msid && imlog.default.monitor(data.ext.msid);
                window.imlog.default.info(data.msg)
            } else {
                data.level = BADJS_LEVEL;
                window.BJ_REPORT && window.BJ_REPORT.report(data)
            }
        }, 2000)
    }

    function __rpJsReport(loadType, msidType, url) {
        var JS_MSID = {SUCC_MSID: "", FAIL_MSID: "35373906"};
        var msid = JS_MSID[msidType];
        __rpReport({msg: "JS " + loadType + ": " + url, ext: {msid: msid}})
    }

    function __retryPlugin(event) {
        try {
            var getRetryUrl = function getRetryUrl(src) {
                var retryPublicPath = "//ke.qq.com/webcourse";
                var publicPath = ["//7.idqqimg.com/edu/webcourse/"];
                if (retryPublicPath) {
                    retryPublicPath += "/";
                    retryPublicPath = retryPublicPath.replace(/\/\/$/, "/")
                }
                var value = src;
                if (Object.prototype.toString.call(publicPath) === "[object Array]") {
                    for (var i = 0; i < publicPath.length; i++) {
                        var formatPublicPath = publicPath[i].replace(/^https?:/, "");
                        if (src.indexOf(formatPublicPath) !== -1) {
                            value = src.replace(/^https?:/, "").replace(formatPublicPath, "").replace(/^\//, "");
                            break
                        }
                    }
                } else {
                    value = src.replace(/^https?:/, "").replace(publicPath.replace(/^https?:/, ""), "").replace(/^\//, "")
                }
                if (value === src) return src;
                return retryPublicPath + value
            };// 修复部分浏览器this.tagName获取失败的问题
            this.onload = this.onerror = null;
            var JS_SUCC_MSID = "";
            var JS_FAIL_MSID = "35373906";
            var CSS_SUCC_MSID = "";
            var CSS_FAIL_MSID = "35373905";
            var JS_RETRY_SUCC_MSID = "35373907";
            var JS_RETRY_FAIL_MSID = "35373908";
            var CSS_RETRY_SUCC_MSID = "35373909";
            var CSS_RETRY_FAIL_MSID = "35373910";
            var isRetry = this.hasAttribute("retry");// 只有异步的js走这个重试逻辑，同步的都是采用document.write
            var isAsync = this.hasAttribute("isAsync");
            var isStyle = this.tagName === "LINK";
            var isError = event.type === "error" || event.type === "timeout";
            var src = this.href || this.src;
            var newSrc = getRetryUrl(src);
            if (isError) {
                if (isRetry) {
                    __rpReport({
                        msg: this.tagName + " retry load fail: " + src,
                        ext: {msid: isStyle ? CSS_RETRY_FAIL_MSID : JS_RETRY_FAIL_MSID}
                    })
                } else {
                    if (isStyle) {// link style 重新加载
                        var link = document.createElement("link");
                        link.rel = "stylesheet";
                        link.href = newSrc;
                        link.setAttribute("retry", "");
                        link.setAttribute("onerror", "__retryPlugin.call(this,event)");
                        link.setAttribute("onload", "__retryPlugin.call(this,event)");
                        this.parentNode.insertBefore(link, this.nextSibling)
                    } else if (isAsync) {// js 重新加载
                        var head = document.getElementsByTagName("head")[0];
                        var script = document.createElement("script");
                        script.charset = "utf-8";
                        script.timeout = 120;
                        script.src = newSrc;
                        if (script.src.indexOf(window.location.origin + "/") !== 0) {
                            script.crossOrigin = "anonymous"
                        }
                        var _timeout_ = setTimeout(function () {
                            script.onerror({type: "timeout", target: script})
                        }, 120000);
                        script.onerror = function (event) {
                            script.onerror = script.onload = null;
                            clearTimeout(_timeout_);
                            __rpReport({
                                msg: this.tagName + " retry load fail: " + this.src,
                                ext: {msid: JS_RETRY_SUCC_MSID}
                            })
                        };
                        script.onload = function (event) {
                            script.onerror = script.onload = null;
                            clearTimeout(_timeout_);
                            __rpReport({
                                msg: this.tagName + " retry load success: " + this.src,
                                ext: {msid: JS_SUCC_MSID}
                            })
                        };
                        head.appendChild(script)
                    }
                    __rpReport({
                        msg: this.tagName + " load fail: " + src,
                        ext: {msid: isStyle ? CSS_FAIL_MSID : JS_FAIL_MSID}
                    })
                }
            } else {
                if (isRetry) {
                    __rpReport({
                        msg: this.tagName + " retry load success: " + src,
                        ext: {msid: isStyle ? CSS_RETRY_SUCC_MSID : JS_RETRY_SUCC_MSID}
                    })
                } else {
                    __rpReport({
                        msg: this.tagName + " load success: " + src,
                        ext: {msid: isStyle ? CSS_SUCC_MSID : JS_SUCC_MSID}
                    })
                }
            }
        } catch (e) {
        }
    }</script>
    <meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
    <meta name="renderer" content="webkit">
    <meta http-equiv="x-dns-prefetch-control" content="on">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1">
    <title>腾讯课堂</title>
    <meta name="keywords" content="腾讯课堂,腾讯教育,远程教育,公开课,网络公开课,在线学习,在线教育,在线培训,在线课堂,名师讲堂,视频课程">
    <meta name="description" itemprop="description" content="快来直播教室观看直播课程，并参与现场讨论，让学习成就梦想！">
    <meta itemprop="name" content="腾讯课堂-直播教室">
    <meta itemprop="image" content="//9.idqqimg.com/edu/lego_modules/edu-ui/0.0.1/img/nohash/logo_pc_rich.png">
    <script>window.SENTRY_RELEASE = {id: "study@feat-tailgolin-refresh-live-player-20210901"}</script>
    <script>var T = {page_start: Date.now()};
    window._tx_webrtc_enable = !1</script>
    <link rel="dns-prefetch" href="//7.idqqimg.com">
    <link rel="dns-prefetch" href="//8.idqqimg.com">
    <link rel="dns-prefetch" href="//9.idqqimg.com"> <!--STYLE-->
    <script>function _typeof(e) {
        return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
            return typeof e
        } : function (e) {
            return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
        })(e)
    }

    !function (e) {
        if ("object" == ("undefined" == typeof exports ? "undefined" : _typeof(exports)) && "undefined" != typeof module) module.exports = e(); else if ("function" == typeof define && define.amd) define([], e); else {
            ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).Raven = e()
        }
    }(function () {
        return function o(a, s, u) {
            function c(n, e) {
                if (!s[n]) {
                    if (!a[n]) {
                        var t = "function" == typeof require && require;
                        if (!e && t) return t(n, !0);
                        if (l) return l(n, !0);
                        var r = new Error("Cannot find module '" + n + "'");
                        throw r.code = "MODULE_NOT_FOUND", r
                    }
                    var i = s[n] = {exports: {}};
                    a[n][0].call(i.exports, function (e) {
                        var t = a[n][1][e];
                        return c(t || e)
                    }, i, i.exports, o, a, s, u)
                }
                return s[n].exports
            }

            for (var l = "function" == typeof require && require, e = 0; e < u.length; e++) c(u[e]);
            return c
        }({
            1: [function (e, t, n) {
                function r(e) {
                    this.name = "RavenConfigError", this.message = e
                }

                (r.prototype = new Error).constructor = r, t.exports = r
            }, {}], 2: [function (e, t, n) {
                var u = e(5);
                t.exports = {
                    wrapMethod: function (e, r, i) {
                        var o = e[r], a = e;
                        if (r in e) {
                            var s = "warn" === r ? "warning" : r;
                            e[r] = function () {
                                var e = [].slice.call(arguments), t = u.safeJoin(e, " "),
                                    n = {level: s, logger: "console", extra: {arguments: e}};
                                "assert" === r ? !1 === e[0] && (t = "Assertion failed: " + (u.safeJoin(e.slice(1), " ") || "console.assert"), n.extra.arguments = e.slice(1), i && i(t, n)) : i && i(t, n), o && Function.prototype.apply.call(o, a, e)
                            }
                        }
                    }
                }
            }, {5: 5}], 3: [function ($, J, e) {
                (function (e) {
                    function i() {
                        return +new Date
                    }

                    function n(t, n) {
                        return v(n) ? function (e) {
                            return n(e, t)
                        } : n
                    }

                    function t() {
                        for (var e in this.a = !("object" != ("undefined" == typeof JSON ? "undefined" : _typeof(JSON)) || !JSON.stringify), this.b = !m(z), this.c = !m(B), this.d = null, this.e = null, this.f = null, this.g = null, this.h = null, this.i = null, this.j = {}, this.k = {
                            release: H.SENTRY_RELEASE && H.SENTRY_RELEASE.id,
                            logger: "javascript",
                            ignoreErrors: [],
                            ignoreUrls: [],
                            whitelistUrls: [],
                            includePaths: [],
                            headers: null,
                            collectWindowErrors: !0,
                            captureUnhandledRejections: !0,
                            maxMessageLength: 0,
                            maxUrlLength: 250,
                            stackTraceLimit: 50,
                            autoBreadcrumbs: !0,
                            instrument: !0,
                            sampleRate: 1,
                            sanitizeKeys: []
                        }, this.l = {
                            method: "POST",
                            referrerPolicy: N() ? "origin" : ""
                        }, this.m = 0, this.n = !1, this.o = Error.stackTraceLimit, this.p = H.console || {}, this.q = {}, this.r = [], this.s = i(), this.t = [], this.u = [], this.v = null, this.w = H.location, this.x = this.w && this.w.href, this.y(), this.p) this.q[e] = this.p[e]
                    }

                    var u = $(6), s = $(7), o = $(8), c = $(1), r = $(5), a = r.isErrorEvent, l = r.isDOMError,
                        f = r.isDOMException, h = r.isError, p = r.isObject, d = r.isPlainObject, m = r.isUndefined,
                        v = r.isFunction, g = r.isString, y = r.isArray, b = r.isEmptyObject, k = r.each,
                        E = r.objectMerge, w = r.truncate, x = r.objectFrozen, S = r.hasKey, j = r.joinRegExp,
                        R = r.urlencode, O = r.uuid4, T = r.htmlTreeAsString, C = r.isSameException,
                        M = r.isSameStacktrace, U = r.parseUrl, L = r.fill, F = r.supportsFetch,
                        N = r.supportsReferrerPolicy, q = r.serializeKeysForMessage, A = r.serializeException,
                        D = r.sanitize, _ = $(2).wrapMethod, P = "source protocol user pass host port path".split(" "),
                        I = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/,
                        H = "undefined" != typeof window ? window : void 0 !== e ? e : "undefined" != typeof self ? self : {},
                        z = H.document, B = H.navigator;
                    (t.prototype = {
                        VERSION: "3.27.2", debug: !1, TraceKit: u, config: function (e, t) {
                            var n = this;
                            if (n.g) return this.z("error", "Error: Raven has already been configured"), n;
                            if (!e) return n;
                            var r = n.k;
                            t && k(t, function (e, t) {
                                "tags" === e || "extra" === e || "user" === e ? n.j[e] = t : r[e] = t
                            }), n.setDSN(e), r.ignoreErrors.push(/^Script error\.?$/), r.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/), r.ignoreErrors = j(r.ignoreErrors), r.ignoreUrls = !!r.ignoreUrls.length && j(r.ignoreUrls), r.whitelistUrls = !!r.whitelistUrls.length && j(r.whitelistUrls), r.includePaths = j(r.includePaths), r.maxBreadcrumbs = Math.max(0, Math.min(r.maxBreadcrumbs || 100, 100));
                            var i = {xhr: !0, console: !0, dom: !0, location: !0, sentry: !0}, o = r.autoBreadcrumbs;
                            "[object Object]" === {}.toString.call(o) ? o = E(i, o) : !1 !== o && (o = i), r.autoBreadcrumbs = o;
                            var a = {tryCatch: !0}, s = r.instrument;
                            return "[object Object]" === {}.toString.call(s) ? s = E(a, s) : !1 !== s && (s = a), r.instrument = s, u.collectWindowErrors = !!r.collectWindowErrors, n
                        }, install: function () {
                            var e = this;
                            return e.isSetup() && !e.n && (u.report.subscribe(function () {
                                e.A.apply(e, arguments)
                            }), e.k.captureUnhandledRejections && e.B(), e.C(), e.k.instrument && e.k.instrument.tryCatch && e.D(), e.k.autoBreadcrumbs && e.E(), e.F(), e.n = !0), Error.stackTraceLimit = e.k.stackTraceLimit, this
                        }, setDSN: function (e) {
                            var t = this, n = t.G(e), r = n.path.lastIndexOf("/"), i = n.path.substr(1, r);
                            t.H = e, t.h = n.user, t.I = n.pass && n.pass.substr(1), t.i = n.path.substr(r + 1), t.g = t.J(n), t.K = t.g + "/" + i + "api/" + t.i + "/store/", this.y()
                        }, context: function (e, t, n) {
                            return v(e) && (n = t || [], t = e, e = {}), this.wrap(e, t).apply(this, n)
                        }, wrap: function (r, i, o) {
                            function e() {
                                var e = [], t = arguments.length, n = !r || r && !1 !== r.deep;
                                for (o && v(o) && o.apply(this, arguments); t--;) e[t] = n ? a.wrap(r, arguments[t]) : arguments[t];
                                try {
                                    return i.apply(this, e)
                                } catch (e) {
                                    throw a.L(), a.captureException(e, r), e
                                }
                            }

                            var a = this;
                            if (m(i) && !v(r)) return r;
                            if (v(r) && (i = r, r = void 0), !v(i)) return i;
                            try {
                                if (i.M) return i;
                                if (i.N) return i.N
                            } catch (e) {
                                return i
                            }
                            for (var t in i) S(i, t) && (e[t] = i[t]);
                            return e.prototype = i.prototype, (i.N = e).M = !0, e.O = i, e
                        }, uninstall: function () {
                            return u.report.uninstall(), this.P(), this.Q(), this.R(), this.S(), Error.stackTraceLimit = this.o, this.n = !1, this
                        }, T: function (e) {
                            this.z("debug", "Raven caught unhandled promise rejection:", e), this.captureException(e.reason, {
                                mechanism: {
                                    type: "onunhandledrejection",
                                    handled: !1
                                }
                            })
                        }, B: function () {
                            return this.T = this.T.bind(this), H.addEventListener && H.addEventListener("unhandledrejection", this.T), this
                        }, P: function () {
                            return H.removeEventListener && H.removeEventListener("unhandledrejection", this.T), this
                        }, captureException: function (t, e) {
                            if (e = E({trimHeadFrames: 0}, e || {}), a(t) && t.error) t = t.error; else {
                                if (l(t) || f(t)) {
                                    var n = t.name || (l(t) ? "DOMError" : "DOMException"),
                                        r = t.message ? n + ": " + t.message : n;
                                    return this.captureMessage(r, E(e, {
                                        stacktrace: !0,
                                        trimHeadFrames: e.trimHeadFrames + 1
                                    }))
                                }
                                if (h(t)) t = t; else {
                                    if (!d(t)) return this.captureMessage(t, E(e, {
                                        stacktrace: !0,
                                        trimHeadFrames: e.trimHeadFrames + 1
                                    }));
                                    e = this.U(e, t), t = new Error(e.message)
                                }
                            }
                            this.d = t;
                            try {
                                var i = u.computeStackTrace(t);
                                this.V(i, e)
                            } catch (e) {
                                if (t !== e) throw e
                            }
                            return this
                        }, U: function (e, t) {
                            var n = Object.keys(t).sort(), r = E(e, {
                                message: "Non-Error exception captured with keys: " + q(n),
                                fingerprint: [o(n)],
                                extra: e.extra || {}
                            });
                            return r.extra.W = A(t), r
                        }, captureMessage: function (e, t) {
                            if (!this.k.ignoreErrors.test || !this.k.ignoreErrors.test(e)) {
                                var n, r = E({message: e += ""}, t = t || {});
                                try {
                                    throw new Error(e)
                                } catch (e) {
                                    n = e
                                }
                                n.name = null;
                                var i = u.computeStackTrace(n), o = y(i.stack) && i.stack[1];
                                o && "Raven.captureException" === o.func && (o = i.stack[2]);
                                var a = o && o.url || "";
                                if ((!this.k.ignoreUrls.test || !this.k.ignoreUrls.test(a)) && (!this.k.whitelistUrls.test || this.k.whitelistUrls.test(a))) {
                                    if (this.k.stacktrace || t.stacktrace || "" === r.message) {
                                        r.fingerprint = null == r.fingerprint ? e : r.fingerprint, (t = E({trimHeadFrames: 0}, t)).trimHeadFrames += 1;
                                        var s = this.X(i, t);
                                        r.stacktrace = {frames: s.reverse()}
                                    }
                                    return r.fingerprint && (r.fingerprint = y(r.fingerprint) ? r.fingerprint : [r.fingerprint]), this.Y(r), this
                                }
                            }
                        }, captureBreadcrumb: function (e) {
                            var t = E({timestamp: i() / 1e3}, e);
                            if (v(this.k.breadcrumbCallback)) {
                                var n = this.k.breadcrumbCallback(t);
                                if (p(n) && !b(n)) t = n; else if (!1 === n) return this
                            }
                            return this.u.push(t), this.u.length > this.k.maxBreadcrumbs && this.u.shift(), this
                        }, addPlugin: function (e) {
                            var t = [].slice.call(arguments, 1);
                            return this.r.push([e, t]), this.n && this.F(), this
                        }, setUserContext: function (e) {
                            return this.j.user = e, this
                        }, setExtraContext: function (e) {
                            return this.Z("extra", e), this
                        }, setTagsContext: function (e) {
                            return this.Z("tags", e), this
                        }, clearContext: function () {
                            return this.j = {}, this
                        }, getContext: function () {
                            return JSON.parse(s(this.j))
                        }, setEnvironment: function (e) {
                            return this.k.environment = e, this
                        }, setRelease: function (e) {
                            return this.k.release = e, this
                        }, setDataCallback: function (e) {
                            var t = this.k.dataCallback;
                            return this.k.dataCallback = n(t, e), this
                        }, setBreadcrumbCallback: function (e) {
                            var t = this.k.breadcrumbCallback;
                            return this.k.breadcrumbCallback = n(t, e), this
                        }, setShouldSendCallback: function (e) {
                            var t = this.k.shouldSendCallback;
                            return this.k.shouldSendCallback = n(t, e), this
                        }, setTransport: function (e) {
                            return this.k.transport = e, this
                        }, lastException: function () {
                            return this.d
                        }, lastEventId: function () {
                            return this.f
                        }, isSetup: function () {
                            return !(!this.a || !this.g && (this.ravenNotConfiguredError || (this.ravenNotConfiguredError = !0, this.z("error", "Error: Raven has not been configured.")), 1))
                        }, afterLoad: function () {
                            var e = H.RavenConfig;
                            e && this.config(e.dsn, e.config).install()
                        }, showReportDialog: function (e) {
                            if (z) {
                                if (!(e = E({
                                    eventId: this.lastEventId(),
                                    dsn: this.H,
                                    user: this.j.user || {}
                                }, e)).eventId) throw new c("Missing eventId");
                                if (!e.dsn) throw new c("Missing DSN");
                                var t = encodeURIComponent, n = [];
                                for (var r in e) if ("user" === r) {
                                    var i = e.user;
                                    i.name && n.push("name=" + t(i.name)), i.email && n.push("email=" + t(i.email))
                                } else n.push(t(r) + "=" + t(e[r]));
                                var o = this.J(this.G(e.dsn)), a = z.createElement("script");
                                a.async = !0, a.src = o + "/api/embed/error-page/?" + n.join("&"), (z.head || z.body).appendChild(a)
                            }
                        }, L: function () {
                            var e = this;
                            this.m += 1, setTimeout(function () {
                                e.m -= 1
                            })
                        }, $: function (e, t) {
                            var n, r;
                            if (this.b) {
                                for (r in t = t || {}, e = "raven" + e.substr(0, 1).toUpperCase() + e.substr(1), z.createEvent ? (n = z.createEvent("HTMLEvents")).initEvent(e, !0, !0) : (n = z.createEventObject()).eventType = e, t) S(t, r) && (n[r] = t[r]);
                                if (z.createEvent) z.dispatchEvent(n); else try {
                                    z.fireEvent("on" + n.eventType.toLowerCase(), n)
                                } catch (e) {
                                }
                            }
                        }, _: function (n) {
                            var r = this;
                            return function (e) {
                                if (r.aa = null, r.v !== e) {
                                    var t;
                                    r.v = e;
                                    try {
                                        t = T(e.target)
                                    } catch (e) {
                                        t = "<unknown>"
                                    }
                                    r.captureBreadcrumb({category: "ui." + n, message: t})
                                }
                            }
                        }, ba: function () {
                            var i = this;
                            return function (e) {
                                var t;
                                try {
                                    t = e.target
                                } catch (e) {
                                    return
                                }
                                var n = t && t.tagName;
                                if (n && ("INPUT" === n || "TEXTAREA" === n || t.isContentEditable)) {
                                    var r = i.aa;
                                    r || i._("input")(e), clearTimeout(r), i.aa = setTimeout(function () {
                                        i.aa = null
                                    }, 1e3)
                                }
                            }
                        }, ca: function (e, t) {
                            var n = U(this.w.href), r = U(t), i = U(e);
                            this.x = t, n.protocol === r.protocol && n.host === r.host && (t = r.relative), n.protocol === i.protocol && n.host === i.host && (e = i.relative), this.captureBreadcrumb({
                                category: "navigation",
                                data: {to: t, from: e}
                            })
                        }, C: function () {
                            var e = this;
                            e.da = Function.prototype.toString, Function.prototype.toString = function () {
                                return "function" == typeof this && this.M ? e.da.apply(this.O, arguments) : e.da.apply(this, arguments)
                            }
                        }, Q: function () {
                            this.da && (Function.prototype.toString = this.da)
                        }, D: function () {
                            function e(o) {
                                return function (e, t) {
                                    for (var n = new Array(arguments.length), r = 0; r < n.length; ++r) n[r] = arguments[r];
                                    var i = n[0];
                                    return v(i) && (n[0] = c.wrap({
                                        mechanism: {
                                            type: "instrument",
                                            data: {function: o.name || "<anonymous>"}
                                        }
                                    }, i)), o.apply ? o.apply(this, n) : o(n[0], n[1])
                                }
                            }

                            function t(u) {
                                var e = H[u] && H[u].prototype;
                                e && e.hasOwnProperty && e.hasOwnProperty("addEventListener") && (L(e, "addEventListener", function (s) {
                                    return function (e, t, n, r) {
                                        try {
                                            t && t.handleEvent && (t.handleEvent = c.wrap({
                                                mechanism: {
                                                    type: "instrument",
                                                    data: {
                                                        target: u,
                                                        function: "handleEvent",
                                                        handler: t && t.name || "<anonymous>"
                                                    }
                                                }
                                            }, t.handleEvent))
                                        } catch (e) {
                                        }
                                        var i, o, a;
                                        return l && l.dom && ("EventTarget" === u || "Node" === u) && (o = c._("click"), a = c.ba(), i = function (e) {
                                            if (e) {
                                                var t;
                                                try {
                                                    t = e.type
                                                } catch (e) {
                                                    return
                                                }
                                                return "click" === t ? o(e) : "keypress" === t ? a(e) : void 0
                                            }
                                        }), s.call(this, e, c.wrap({
                                            mechanism: {
                                                type: "instrument",
                                                data: {
                                                    target: u,
                                                    function: "addEventListener",
                                                    handler: t && t.name || "<anonymous>"
                                                }
                                            }
                                        }, t, i), n, r)
                                    }
                                }, n), L(e, "removeEventListener", function (i) {
                                    return function (e, t, n, r) {
                                        try {
                                            t = t && (t.N ? t.N : t)
                                        } catch (e) {
                                        }
                                        return i.call(this, e, t, n, r)
                                    }
                                }, n))
                            }

                            var c = this, n = c.t, l = this.k.autoBreadcrumbs;
                            L(H, "setTimeout", e, n), L(H, "setInterval", e, n), H.requestAnimationFrame && L(H, "requestAnimationFrame", function (t) {
                                return function (e) {
                                    return t(c.wrap({
                                        mechanism: {
                                            type: "instrument",
                                            data: {
                                                function: "requestAnimationFrame",
                                                handler: t && t.name || "<anonymous>"
                                            }
                                        }
                                    }, e))
                                }
                            }, n);
                            for (var r = ["EventTarget", "Window", "Node", "ApplicationCache", "AudioTrackList", "ChannelMergerNode", "CryptoOperation", "EventSource", "FileReader", "HTMLUnknownElement", "IDBDatabase", "IDBRequest", "IDBTransaction", "KeyOperation", "MediaController", "MessagePort", "ModalWindow", "Notification", "SVGElementInstance", "Screen", "TextTrack", "TextTrackCue", "TextTrackList", "WebSocket", "WebSocketWorker", "Worker", "XMLHttpRequest", "XMLHttpRequestEventTarget", "XMLHttpRequestUpload"], i = 0; i < r.length; i++) t(r[i])
                        }, E: function () {
                            function o(t, e) {
                                t in e && v(e[t]) && L(e, t, function (e) {
                                    return s.wrap({
                                        mechanism: {
                                            type: "instrument",
                                            data: {function: t, handler: e && e.name || "<anonymous>"}
                                        }
                                    }, e)
                                })
                            }

                            var s = this, e = this.k.autoBreadcrumbs, t = s.t;
                            if (e.xhr && "XMLHttpRequest" in H) {
                                var n = H.XMLHttpRequest && H.XMLHttpRequest.prototype;
                                L(n, "open", function (n) {
                                    return function (e, t) {
                                        return g(t) && -1 === t.indexOf(s.h) && (this.ea = {
                                            method: e,
                                            url: t,
                                            status_code: null
                                        }), n.apply(this, arguments)
                                    }
                                }, t), L(n, "send", function (i) {
                                    return function () {
                                        function t() {
                                            if (e.ea && 4 === e.readyState) {
                                                try {
                                                    e.ea.status_code = e.status
                                                } catch (e) {
                                                }
                                                s.captureBreadcrumb({type: "http", category: "xhr", data: e.ea})
                                            }
                                        }

                                        for (var e = this, n = ["onload", "onerror", "onprogress"], r = 0; r < n.length; r++) o(n[r], e);
                                        return "onreadystatechange" in e && v(e.onreadystatechange) ? L(e, "onreadystatechange", function (e) {
                                            return s.wrap({
                                                mechanism: {
                                                    type: "instrument",
                                                    data: {
                                                        function: "onreadystatechange",
                                                        handler: e && e.name || "<anonymous>"
                                                    }
                                                }
                                            }, e, t)
                                        }) : e.onreadystatechange = t, i.apply(this, arguments)
                                    }
                                }, t)
                            }
                            e.xhr && F() && L(H, "fetch", function (a) {
                                return function () {
                                    for (var e = new Array(arguments.length), t = 0; t < e.length; ++t) e[t] = arguments[t];
                                    var n, r = e[0], i = "GET";
                                    if ("string" == typeof r ? n = r : "Request" in H && r instanceof H.Request ? (n = r.url, r.method && (i = r.method)) : n = "" + r, -1 !== n.indexOf(s.h)) return a.apply(this, e);
                                    e[1] && e[1].method && (i = e[1].method);
                                    var o = {method: i, url: n, status_code: null};
                                    return a.apply(this, e).then(function (e) {
                                        return o.status_code = e.status, s.captureBreadcrumb({
                                            type: "http",
                                            category: "fetch",
                                            data: o
                                        }), e
                                    }).catch(function (e) {
                                        throw s.captureBreadcrumb({
                                            type: "http",
                                            category: "fetch",
                                            data: o,
                                            level: "error"
                                        }), e
                                    })
                                }
                            }, t), e.dom && this.b && (z.addEventListener ? (z.addEventListener("click", s._("click"), !1), z.addEventListener("keypress", s.ba(), !1)) : z.attachEvent && (z.attachEvent("onclick", s._("click")), z.attachEvent("onkeypress", s.ba())));
                            var r = H.chrome,
                                i = !(r && r.app && r.app.runtime) && H.history && H.history.pushState && H.history.replaceState;
                            if (e.location && i) {
                                var a = H.onpopstate;
                                H.onpopstate = function () {
                                    var e = s.w.href;
                                    if (s.ca(s.x, e), a) return a.apply(this, arguments)
                                };
                                var u = function (t) {
                                    return function () {
                                        var e = 2 < arguments.length ? arguments[2] : void 0;
                                        return e && s.ca(s.x, e + ""), t.apply(this, arguments)
                                    }
                                };
                                L(H.history, "pushState", u, t), L(H.history, "replaceState", u, t)
                            }
                            if (e.console && "console" in H && console.log) {
                                var c = function (e, t) {
                                    s.captureBreadcrumb({message: e, level: t.level, category: "console"})
                                };
                                k(["debug", "info", "warn", "error", "log"], function (e, t) {
                                    _(console, t, c)
                                })
                            }
                        }, R: function () {
                            for (var e; this.t.length;) {
                                var t = (e = this.t.shift())[0], n = e[1], r = e[2];
                                t[n] = r
                            }
                        }, S: function () {
                            for (var e in this.q) this.p[e] = this.q[e]
                        }, F: function () {
                            var i = this;
                            k(this.r, function (e, t) {
                                var n = t[0], r = t[1];
                                n.apply(i, [i].concat(r))
                            })
                        }, G: function (t) {
                            var e = I.exec(t), n = {}, r = 7;
                            try {
                                for (; r--;) n[P[r]] = e[r] || ""
                            } catch (e) {
                                throw new c("Invalid DSN: " + t)
                            }
                            if (n.pass && !this.k.allowSecretKey) throw new c("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");
                            return n
                        }, J: function (e) {
                            var t = "//" + e.host + (e.port ? ":" + e.port : "");
                            return e.protocol && (t = e.protocol + ":" + t), t
                        }, A: function (e, t) {
                            (t = t || {}).mechanism = t.mechanism || {
                                type: "onerror",
                                handled: !1
                            }, this.m || this.V(e, t)
                        }, V: function (e, t) {
                            var n = this.X(e, t);
                            this.$("handle", {
                                stackInfo: e,
                                options: t
                            }), this.fa(e.name, e.message, e.url, e.lineno, n, t)
                        }, X: function (r, e) {
                            var i = this, o = [];
                            if (r.stack && r.stack.length && (k(r.stack, function (e, t) {
                                var n = i.ga(t, r.url);
                                n && o.push(n)
                            }), e && e.trimHeadFrames)) for (var t = 0; t < e.trimHeadFrames && t < o.length; t++) o[t].in_app = !1;
                            return o = o.slice(0, this.k.stackTraceLimit)
                        }, ga: function (e, t) {
                            var n = {filename: e.url, lineno: e.line, colno: e.column, function: e.func || "?"};
                            return e.url || (n.filename = t), n.in_app = !(this.k.includePaths.test && !this.k.includePaths.test(n.filename) || /(Raven|TraceKit)\./.test(n.function) || /raven\.(min\.)?js$/.test(n.filename)), n
                        }, fa: function (e, t, n, r, i, o) {
                            var a, s = (e ? e + ": " : "") + (t || "");
                            if ((!this.k.ignoreErrors.test || !this.k.ignoreErrors.test(t) && !this.k.ignoreErrors.test(s)) && (i && i.length ? (n = i[0].filename || n, i.reverse(), a = {frames: i}) : n && (a = {
                                frames: [{
                                    filename: n,
                                    lineno: r,
                                    in_app: !0
                                }]
                            }), (!this.k.ignoreUrls.test || !this.k.ignoreUrls.test(n)) && (!this.k.whitelistUrls.test || this.k.whitelistUrls.test(n)))) {
                                var u = E({
                                    exception: {values: [{type: e, value: t, stacktrace: a}]},
                                    transaction: n
                                }, o), c = u.exception.values[0];
                                null == c.type && "" === c.value && (c.value = "Unrecoverable error caught"), !u.exception.mechanism && u.mechanism && (u.exception.mechanism = u.mechanism, delete u.mechanism), u.exception.mechanism = E({
                                    type: "generic",
                                    handled: !0
                                }, u.exception.mechanism || {}), this.Y(u)
                            }
                        }, ha: function (e) {
                            var t = this.k.maxMessageLength;
                            if (e.message && (e.message = w(e.message, t)), e.exception) {
                                var n = e.exception.values[0];
                                n.value = w(n.value, t)
                            }
                            var r = e.request;
                            return r && (r.url && (r.url = w(r.url, this.k.maxUrlLength)), r.Referer && (r.Referer = w(r.Referer, this.k.maxUrlLength))), e.breadcrumbs && e.breadcrumbs.values && this.ia(e.breadcrumbs), e
                        }, ia: function (e) {
                            for (var t, n, r, i = ["to", "from", "url"], o = 0; o < e.values.length; ++o) if ((n = e.values[o]).hasOwnProperty("data") && p(n.data) && !x(n.data)) {
                                r = E({}, n.data);
                                for (var a = 0; a < i.length; ++a) t = i[a], r.hasOwnProperty(t) && r[t] && (r[t] = w(r[t], this.k.maxUrlLength));
                                e.values[o].data = r
                            }
                        }, ja: function () {
                            if (this.c || this.b) {
                                var e = {};
                                return this.c && B.userAgent && (e.headers = {"User-Agent": B.userAgent}), H.location && H.location.href && (e.url = H.location.href), this.b && z.referrer && (e.headers || (e.headers = {}), e.headers.Referer = z.referrer), e
                            }
                        }, y: function () {
                            this.ka = 0, this.la = null
                        }, ma: function () {
                            return this.ka && i() - this.la < this.ka
                        }, na: function (e) {
                            var t = this.e;
                            return !(!t || e.message !== t.message || e.transaction !== t.transaction) && (e.stacktrace || t.stacktrace ? M(e.stacktrace, t.stacktrace) : e.exception || t.exception ? C(e.exception, t.exception) : !e.fingerprint && !t.fingerprint || Boolean(e.fingerprint && t.fingerprint) && JSON.stringify(e.fingerprint) === JSON.stringify(t.fingerprint))
                        }, oa: function (e) {
                            if (!this.ma()) {
                                var t = e.status;
                                if (400 === t || 401 === t || 429 === t) {
                                    var n;
                                    try {
                                        n = F() ? e.headers.get("Retry-After") : e.getResponseHeader("Retry-After"), n = 1e3 * parseInt(n, 10)
                                    } catch (e) {
                                    }
                                    this.ka = n || (2 * this.ka || 1e3), this.la = i()
                                }
                            }
                        }, Y: function (t) {
                            var e = this.k, n = {project: this.i, logger: e.logger, platform: "javascript"},
                                r = this.ja();
                            if (r && (n.request = r), t.trimHeadFrames && delete t.trimHeadFrames, (t = E(n, t)).tags = E(E({}, this.j.tags), t.tags), t.extra = E(E({}, this.j.extra), t.extra), t.extra["session:duration"] = i() - this.s, this.u && 0 < this.u.length && (t.breadcrumbs = {values: [].slice.call(this.u, 0)}), this.j.user && (t.user = this.j.user), e.environment && (t.environment = e.environment), e.release && (t.release = e.release), e.serverName && (t.server_name = e.serverName), t = this.pa(t), Object.keys(t).forEach(function (e) {
                                (null == t[e] || "" === t[e] || b(t[e])) && delete t[e]
                            }), v(e.dataCallback) && (t = e.dataCallback(t) || t), t && !b(t) && (!v(e.shouldSendCallback) || e.shouldSendCallback(t))) return this.ma() ? void this.z("warn", "Raven dropped error due to backoff: ", t) : void ("number" == typeof e.sampleRate ? Math.random() < e.sampleRate && this.qa(t) : this.qa(t))
                        }, pa: function (e) {
                            return D(e, this.k.sanitizeKeys)
                        }, ra: function () {
                            return O()
                        }, qa: function (t, n) {
                            var r = this, e = this.k;
                            if (this.isSetup()) {
                                if (t = this.ha(t), !this.k.allowDuplicates && this.na(t)) return void this.z("warn", "Raven dropped repeat event: ", t);
                                this.f = t.event_id || (t.event_id = this.ra()), this.e = t, this.z("debug", "Raven about to send:", t);
                                var i = {
                                    sentry_version: "7",
                                    sentry_client: "raven-js/" + this.VERSION,
                                    sentry_key: this.h
                                };
                                this.I && (i.sentry_secret = this.I);
                                var o = t.exception && t.exception.values[0];
                                this.k.autoBreadcrumbs && this.k.autoBreadcrumbs.sentry && this.captureBreadcrumb({
                                    category: "sentry",
                                    message: o ? (o.type ? o.type + ": " : "") + o.value : t.message,
                                    event_id: t.event_id,
                                    level: t.level || "error"
                                });
                                var a = this.K;
                                (e.transport || this._makeRequest).call(this, {
                                    url: a,
                                    auth: i,
                                    data: t,
                                    options: e,
                                    onSuccess: function () {
                                        r.y(), r.$("success", {data: t, src: a}), n && n()
                                    },
                                    onError: function (e) {
                                        r.z("error", "Raven transport failed to send: ", e), e.request && r.oa(e.request), r.$("failure", {
                                            data: t,
                                            src: a
                                        }), e = e || new Error("Raven send failed (no additional details provided)"), n && n(e)
                                    }
                                })
                            }
                        }, _makeRequest: function (n) {
                            var e = n.url + "?" + R(n.auth), t = null, r = {};
                            if (n.options.headers && (t = this.sa(n.options.headers)), n.options.fetchParameters && (r = this.sa(n.options.fetchParameters)), F()) {
                                r.body = s(n.data);
                                var i = E({}, this.l), o = E(i, r);
                                return t && (o.headers = t), H.fetch(e, o).then(function (e) {
                                    if (e.ok) n.onSuccess && n.onSuccess(); else {
                                        var t = new Error("Sentry error code: " + e.status);
                                        t.request = e, n.onError && n.onError(t)
                                    }
                                }).catch(function () {
                                    n.onError && n.onError(new Error("Sentry error code: network unavailable"))
                                })
                            }
                            var a = H.XMLHttpRequest && new H.XMLHttpRequest;
                            a && (("withCredentials" in a || "undefined" != typeof XDomainRequest) && ("withCredentials" in a ? a.onreadystatechange = function () {
                                if (4 === a.readyState) if (200 === a.status) n.onSuccess && n.onSuccess(); else if (n.onError) {
                                    var e = new Error("Sentry error code: " + a.status);
                                    e.request = a, n.onError(e)
                                }
                            } : (a = new XDomainRequest, e = e.replace(/^https?:/, ""), n.onSuccess && (a.onload = n.onSuccess), n.onError && (a.onerror = function () {
                                var e = new Error("Sentry error code: XDomainRequest");
                                e.request = a, n.onError(e)
                            })), a.open("POST", e), t && k(t, function (e, t) {
                                a.setRequestHeader(e, t)
                            }), a.send(s(n.data))))
                        }, sa: function (e) {
                            var t = {};
                            for (var n in e) if (e.hasOwnProperty(n)) {
                                var r = e[n];
                                t[n] = "function" == typeof r ? r() : r
                            }
                            return t
                        }, z: function (e) {
                            this.q[e] && (this.debug || this.k.debug) && Function.prototype.apply.call(this.q[e], this.p, [].slice.call(arguments, 1))
                        }, Z: function (e, t) {
                            m(t) ? delete this.j[e] : this.j[e] = E(this.j[e] || {}, t)
                        }
                    }).setUser = t.prototype.setUserContext, t.prototype.setReleaseContext = t.prototype.setRelease, J.exports = t
                }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {})
            }, {1: 1, 2: 2, 5: 5, 6: 6, 7: 7, 8: 8}], 4: [function (o, a, e) {
                (function (e) {
                    var t = o(3),
                        n = "undefined" != typeof window ? window : void 0 !== e ? e : "undefined" != typeof self ? self : {},
                        r = n.Raven, i = new t;
                    i.noConflict = function () {
                        return n.Raven = r, i
                    }, i.afterLoad(), a.exports = i, a.exports.Client = t
                }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {})
            }, {3: 3}], 5: [function (b, k, e) {
                (function (e) {
                    function i(e) {
                        return void 0 === e
                    }

                    function a(e) {
                        return "[object Object]" === Object.prototype.toString.call(e)
                    }

                    function u(e) {
                        return "[object String]" === Object.prototype.toString.call(e)
                    }

                    function s(e) {
                        return "[object Array]" === Object.prototype.toString.call(e)
                    }

                    function t() {
                        if (!("fetch" in v)) return !1;
                        try {
                            return new Headers, new Request(""), new Response, !0
                        } catch (e) {
                            return !1
                        }
                    }

                    function r(e, t) {
                        var n, r;
                        if (i(e.length)) for (n in e) o(e, n) && t.call(null, n, e[n]); else if (r = e.length) for (n = 0; n < r; n++) t.call(null, n, e[n])
                    }

                    function n(e, t) {
                        if ("number" != typeof t) throw new Error("2nd argument to `truncate` function should be a number");
                        return "string" != typeof e || 0 === t ? e : e.length <= t ? e : e.substr(0, t) + "…"
                    }

                    function o(e, t) {
                        return Object.prototype.hasOwnProperty.call(e, t)
                    }

                    function c(e) {
                        for (var t, n = [], r = 0, i = e.length; r < i; r++) u(t = e[r]) ? n.push(t.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1")) : t && t.source && n.push(t.source);
                        return new RegExp(n.join("|"), "i")
                    }

                    function l(e) {
                        var t, n, r, i, o, a = [];
                        if (!e || !e.tagName) return "";
                        if (a.push(e.tagName.toLowerCase()), e.id && a.push("#" + e.id), (t = e.className) && u(t)) for (n = t.split(/\s+/), o = 0; o < n.length; o++) a.push("." + n[o]);
                        var s = ["type", "name", "title", "alt"];
                        for (o = 0; o < s.length; o++) r = s[o], (i = e.getAttribute(r)) && a.push("[" + r + '="' + i + '"]');
                        return a.join("")
                    }

                    function f(e, t) {
                        return !!(!!e ^ !!t)
                    }

                    function h(e, t) {
                        if (f(e, t)) return !1;
                        var n = e.frames, r = t.frames;
                        if (void 0 === n || void 0 === r) return !1;
                        if (n.length !== r.length) return !1;
                        for (var i, o, a = 0; a < n.length; a++) if (i = n[a], o = r[a], i.filename !== o.filename || i.lineno !== o.lineno || i.colno !== o.colno || i.function !== o.function) return !1;
                        return !0
                    }

                    function p(e) {
                        return t = JSON.stringify(e), ~-encodeURI(t).split(/%..|./).length;
                        var t
                    }

                    function d(e) {
                        if ("string" == typeof e) {
                            return n(e, 40)
                        }
                        if ("number" == typeof e || "boolean" == typeof e || void 0 === e) return e;
                        var t = Object.prototype.toString.call(e);
                        return "[object Object]" === t ? "[Object]" : "[object Array]" === t ? "[Array]" : "[object Function]" === t ? e.name ? "[Function: " + e.name + "]" : "[Function]" : e
                    }

                    var m = b(7),
                        v = "undefined" != typeof window ? window : void 0 !== e ? e : "undefined" != typeof self ? self : {},
                        g = 3, y = 51200;
                    k.exports = {
                        isObject: function (e) {
                            return "object" == _typeof(e) && null !== e
                        }, isError: function (e) {
                            switch (Object.prototype.toString.call(e)) {
                                case"[object Error]":
                                case"[object Exception]":
                                case"[object DOMException]":
                                    return !0;
                                default:
                                    return e instanceof Error
                            }
                        }, isErrorEvent: function (e) {
                            return "[object ErrorEvent]" === Object.prototype.toString.call(e)
                        }, isDOMError: function (e) {
                            return "[object DOMError]" === Object.prototype.toString.call(e)
                        }, isDOMException: function (e) {
                            return "[object DOMException]" === Object.prototype.toString.call(e)
                        }, isUndefined: i, isFunction: function (e) {
                            return "function" == typeof e
                        }, isPlainObject: a, isString: u, isArray: s, isEmptyObject: function (e) {
                            if (!a(e)) return !1;
                            for (var t in e) if (e.hasOwnProperty(t)) return !1;
                            return !0
                        }, supportsErrorEvent: function () {
                            try {
                                return new ErrorEvent(""), !0
                            } catch (e) {
                                return !1
                            }
                        }, supportsDOMError: function () {
                            try {
                                return new DOMError(""), !0
                            } catch (e) {
                                return !1
                            }
                        }, supportsDOMException: function () {
                            try {
                                return new DOMException(""), !0
                            } catch (e) {
                                return !1
                            }
                        }, supportsFetch: t, supportsReferrerPolicy: function () {
                            if (!t()) return !1;
                            try {
                                return new Request("pickleRick", {referrerPolicy: "origin"}), !0
                            } catch (e) {
                                return !1
                            }
                        }, supportsPromiseRejectionEvent: function () {
                            return "function" == typeof PromiseRejectionEvent
                        }, wrappedCallback: function (r) {
                            return function (e, t) {
                                var n = r(e) || e;
                                return t && t(n) || n
                            }
                        }, each: r, objectMerge: function (n, e) {
                            return e && r(e, function (e, t) {
                                n[e] = t
                            }), n
                        }, truncate: n, objectFrozen: function (e) {
                            return !!Object.isFrozen && Object.isFrozen(e)
                        }, hasKey: o, joinRegExp: c, urlencode: function (e) {
                            var n = [];
                            return r(e, function (e, t) {
                                n.push(encodeURIComponent(e) + "=" + encodeURIComponent(t))
                            }), n.join("&")
                        }, uuid4: function () {
                            var e = v.crypto || v.msCrypto;
                            if (i(e) || !e.getRandomValues) return "xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g, function (e) {
                                var t = 16 * Math.random() | 0;
                                return ("x" === e ? t : 3 & t | 8).toString(16)
                            });
                            var t = new Uint16Array(8);
                            e.getRandomValues(t), t[3] = 4095 & t[3] | 16384, t[4] = 16383 & t[4] | 32768;
                            var n = function (e) {
                                for (var t = e.toString(16); t.length < 4;) t = "0" + t;
                                return t
                            };
                            return n(t[0]) + n(t[1]) + n(t[2]) + n(t[3]) + n(t[4]) + n(t[5]) + n(t[6]) + n(t[7])
                        }, htmlTreeAsString: function (e) {
                            for (var t, n = [], r = 0, i = 0, o = " > ".length; e && r++ < 5 && !("html" === (t = l(e)) || 1 < r && 80 <= i + n.length * o + t.length);) n.push(t), i += t.length, e = e.parentNode;
                            return n.reverse().join(" > ")
                        }, htmlElementAsString: l, isSameException: function (e, t) {
                            return !f(e, t) && (e = e.values[0], t = t.values[0], e.type === t.type && e.value === t.value && (n = e.stacktrace, r = t.stacktrace, !(i(n) && i(r))) && h(e.stacktrace, t.stacktrace));
                            var n, r
                        }, isSameStacktrace: h, parseUrl: function (e) {
                            if ("string" != typeof e) return {};
                            var t = e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),
                                n = t[6] || "", r = t[8] || "";
                            return {protocol: t[2], host: t[4], path: t[5], relative: t[5] + n + r}
                        }, fill: function (e, t, n, r) {
                            if (null != e) {
                                var i = e[t];
                                e[t] = n(i), e[t].M = !0, e[t].O = i, r && r.push([e, t, i])
                            }
                        }, safeJoin: function (e, t) {
                            if (!s(e)) return "";
                            for (var n = [], r = 0; r < e.length; r++) try {
                                n.push(String(e[r]))
                            } catch (e) {
                                n.push("[value cannot be serialized]")
                            }
                            return n.join(t)
                        }, serializeException: function e(t, n, r) {
                            if (!a(t)) return t;
                            r = "number" != typeof (n = "number" != typeof n ? g : n) ? y : r;
                            var i = function n(r, i) {
                                return 0 === i ? d(r) : a(r) ? Object.keys(r).reduce(function (e, t) {
                                    return e[t] = n(r[t], i - 1), e
                                }, {}) : Array.isArray(r) ? r.map(function (e) {
                                    return n(e, i - 1)
                                }) : d(r)
                            }(t, n);
                            return p(m(i)) > r ? e(t, n - 1) : i
                        }, serializeKeysForMessage: function (e, t) {
                            if ("number" == typeof e || "string" == typeof e) return e.toString();
                            if (!Array.isArray(e)) return "";
                            if (0 === (e = e.filter(function (e) {
                                return "string" == typeof e
                            })).length) return "[object has no keys]";
                            if (t = "number" != typeof t ? 40 : t, e[0].length >= t) return e[0];
                            for (var n = e.length; 0 < n; n--) {
                                var r = e.slice(0, n).join(", ");
                                if (!(r.length > t)) return n === e.length ? r : r + "…"
                            }
                            return ""
                        }, sanitize: function (t, e) {
                            if (!s(e) || s(e) && 0 === e.length) return t;
                            var n, i = c(e), o = "********";
                            try {
                                n = JSON.parse(m(t))
                            } catch (e) {
                                return t
                            }
                            return function n(r) {
                                return s(r) ? r.map(function (e) {
                                    return n(e)
                                }) : a(r) ? Object.keys(r).reduce(function (e, t) {
                                    return e[t] = i.test(t) ? o : n(r[t]), e
                                }, {}) : r
                            }(n)
                        }
                    }
                }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {})
            }, {7: 7}], 6: [function (t, n, e) {
                (function (e) {
                    function y() {
                        return "undefined" == typeof document || null == document.location ? "" : document.location.href
                    }

                    var d = t(5), m = {collectWindowErrors: !0, debug: !1},
                        r = "undefined" != typeof window ? window : void 0 !== e ? e : "undefined" != typeof self ? self : {},
                        s = [].slice,
                        v = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;
                    m.report = function () {
                        function l(e, t) {
                            var n = null;
                            if (!t || m.collectWindowErrors) {
                                for (var r in i) if (i.hasOwnProperty(r)) try {
                                    i[r].apply(null, [e].concat(s.call(arguments, 2)))
                                } catch (e) {
                                    n = e
                                }
                                if (n) throw n
                            }
                        }

                        function t(e, t, n, r, i) {
                            var o = d.isErrorEvent(i) ? i.error : i, a = d.isErrorEvent(e) ? e.message : e;
                            if (p) m.computeStackTrace.augmentStackTraceWithInitialElement(p, t, n, a), f(); else if (o && d.isError(o)) l(m.computeStackTrace(o), !0); else {
                                var s, u = {url: t, line: n, column: r}, c = void 0;
                                if ("[object String]" === {}.toString.call(a)) (s = a.match(v)) && (c = s[1], a = s[2]);
                                u.func = "?", l({name: c, message: a, url: y(), stack: [u]}, !0)
                            }
                            return !!h && h.apply(this, arguments)
                        }

                        function f() {
                            var e = p, t = o;
                            l.apply(a = p = o = null, [e, !1].concat(t))
                        }

                        function e(e, t) {
                            var n = s.call(arguments, 1);
                            if (p) {
                                if (a === e) return;
                                f()
                            }
                            var r = m.computeStackTrace(e);
                            if (p = r, a = e, o = n, setTimeout(function () {
                                a === e && f()
                            }, r.incomplete ? 2e3 : 0), !1 !== t) throw e
                        }

                        var h, n, i = [], o = null, a = null, p = null;
                        return e.subscribe = function (e) {
                            n || (h = r.onerror, r.onerror = t, n = !0), i.push(e)
                        }, e.unsubscribe = function (e) {
                            for (var t = i.length - 1; 0 <= t; --t) i[t] === e && i.splice(t, 1)
                        }, e.uninstall = function () {
                            n && (r.onerror = h, n = !1, h = void 0), i = []
                        }, e
                    }(), m.computeStackTrace = function () {
                        function r(e) {
                            if (void 0 !== e.stack && e.stack) {
                                for (var t, n, r, i = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i, o = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i, a = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js))(?::(\d+))?(?::(\d+))?\s*$/i, s = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i, u = /\((\S*)(?::(\d+))(?::(\d+))\)/, c = e.stack.split("\n"), l = [], f = (/^(.*) is undefined$/.exec(e.message), 0), h = c.length; f < h; ++f) {
                                    if (n = i.exec(c[f])) {
                                        var p = n[2] && 0 === n[2].indexOf("native");
                                        n[2] && 0 === n[2].indexOf("eval") && (t = u.exec(n[2])) && (n[2] = t[1], n[3] = t[2], n[4] = t[3]), r = {
                                            url: p ? null : n[2],
                                            func: n[1] || "?",
                                            args: p ? [n[2]] : [],
                                            line: n[3] ? +n[3] : null,
                                            column: n[4] ? +n[4] : null
                                        }
                                    } else if (n = o.exec(c[f])) r = {
                                        url: n[2],
                                        func: n[1] || "?",
                                        args: [],
                                        line: +n[3],
                                        column: n[4] ? +n[4] : null
                                    }; else {
                                        if (!(n = a.exec(c[f]))) continue;
                                        n[3] && -1 < n[3].indexOf(" > eval") && (t = s.exec(n[3])) ? (n[3] = t[1], n[4] = t[2], n[5] = null) : 0 !== f || n[5] || void 0 === e.columnNumber || (l[0].column = e.columnNumber + 1), r = {
                                            url: n[3],
                                            func: n[1] || "?",
                                            args: n[2] ? n[2].split(",") : [],
                                            line: n[4] ? +n[4] : null,
                                            column: n[5] ? +n[5] : null
                                        }
                                    }
                                    if (!r.func && r.line && (r.func = "?"), r.url && "blob:" === r.url.substr(0, 5)) {
                                        var d = new XMLHttpRequest;
                                        if (d.open("GET", r.url, !1), d.send(null), 200 === d.status) {
                                            var m = d.responseText || "",
                                                v = (m = m.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);
                                            if (v) {
                                                var g = v[1];
                                                "~" === g.charAt(0) && (g = ("undefined" == typeof document || null == document.location ? "" : document.location.origin ? document.location.origin : document.location.protocol + "//" + document.location.hostname + (document.location.port ? ":" + document.location.port : "")) + g.slice(1)), r.url = g.slice(0, -4)
                                            }
                                        }
                                    }
                                    l.push(r)
                                }
                                return l.length ? {name: e.name, message: e.message, url: y(), stack: l} : null
                            }
                        }

                        function l(e, t, n, r) {
                            var i = {url: t, line: n};
                            if (i.url && i.line) {
                                if (e.incomplete = !1, i.func || (i.func = "?"), 0 < e.stack.length && e.stack[0].url === i.url) {
                                    if (e.stack[0].line === i.line) return !1;
                                    if (!e.stack[0].line && e.stack[0].func === i.func) return e.stack[0].line = i.line, !1
                                }
                                return e.stack.unshift(i), e.partial = !0
                            }
                            return !(e.incomplete = !0)
                        }

                        function f(e, t) {
                            for (var n, r, i = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i, o = [], a = {}, s = !1, u = f.caller; u && !s; u = u.caller) if (u !== h && u !== m.report) {
                                if (r = {
                                    url: null,
                                    func: "?",
                                    line: null,
                                    column: null
                                }, u.name ? r.func = u.name : (n = i.exec(u.toString())) && (r.func = n[1]), void 0 === r.func) try {
                                    r.func = n.input.substring(0, n.input.indexOf("{"))
                                } catch (e) {
                                }
                                a["" + u] ? s = !0 : a["" + u] = !0, o.push(r)
                            }
                            t && o.splice(0, t);
                            var c = {name: e.name, message: e.message, url: y(), stack: o};
                            return l(c, e.sourceURL || e.fileName, e.line || e.lineNumber, e.message || e.description), c
                        }

                        function h(e, t) {
                            var n = null;
                            t = null == t ? 0 : +t;
                            try {
                                if (n = r(e)) return n
                            } catch (e) {
                                if (m.debug) throw e
                            }
                            try {
                                if (n = f(e, t + 1)) return n
                            } catch (e) {
                                if (m.debug) throw e
                            }
                            return {name: e.name, message: e.message, url: y()}
                        }

                        return h.augmentStackTraceWithInitialElement = l, h.computeStackTraceFromStackProp = r, h
                    }(), n.exports = m
                }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {})
            }, {5: 5}], 7: [function (e, t, n) {
                function s(e, t) {
                    for (var n = 0; n < e.length; ++n) if (e[n] === t) return n;
                    return -1
                }

                function i(r, i) {
                    var o = [], a = [];
                    return null == i && (i = function (e, t) {
                        return o[0] === t ? "[Circular ~]" : "[Circular ~." + a.slice(0, s(o, t)).join(".") + "]"
                    }), function (e, t) {
                        if (0 < o.length) {
                            var n = s(o, this);
                            ~n ? o.splice(n + 1) : o.push(this), ~n ? a.splice(n, 1 / 0, e) : a.push(e), ~s(o, t) && (t = i.call(this, e, t))
                        } else o.push(t);
                        return null == r ? t instanceof Error ? function (e) {
                            var t = {stack: e.stack, message: e.message, name: e.name};
                            for (var n in e) Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);
                            return t
                        }(t) : t : r.call(this, e, t)
                    }
                }

                (t.exports = function (e, t, n, r) {
                    return JSON.stringify(e, i(t, r), n)
                }).getSerialize = i
            }, {}], 8: [function (e, t, n) {
                function f(e, t) {
                    var n = (65535 & e) + (65535 & t);
                    return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
                }

                function s(e, t, n, r, i, o) {
                    return f((a = f(f(t, e), f(r, o))) << (s = i) | a >>> 32 - s, n);
                    var a, s
                }

                function h(e, t, n, r, i, o, a) {
                    return s(t & n | ~t & r, e, t, i, o, a)
                }

                function p(e, t, n, r, i, o, a) {
                    return s(t & r | n & ~r, e, t, i, o, a)
                }

                function d(e, t, n, r, i, o, a) {
                    return s(t ^ n ^ r, e, t, i, o, a)
                }

                function m(e, t, n, r, i, o, a) {
                    return s(n ^ (t | ~r), e, t, i, o, a)
                }

                function u(e, t) {
                    e[t >> 5] |= 128 << t % 32, e[14 + (t + 64 >>> 9 << 4)] = t;
                    var n, r, i, o, a, s = 1732584193, u = -271733879, c = -1732584194, l = 271733878;
                    for (n = 0; n < e.length; n += 16) u = m(u = m(u = m(u = m(u = d(u = d(u = d(u = d(u = p(u = p(u = p(u = p(u = h(u = h(u = h(u = h(i = u, c = h(o = c, l = h(a = l, s = h(r = s, u, c, l, e[n], 7, -680876936), u, c, e[n + 1], 12, -389564586), s, u, e[n + 2], 17, 606105819), l, s, e[n + 3], 22, -1044525330), c = h(c, l = h(l, s = h(s, u, c, l, e[n + 4], 7, -176418897), u, c, e[n + 5], 12, 1200080426), s, u, e[n + 6], 17, -1473231341), l, s, e[n + 7], 22, -45705983), c = h(c, l = h(l, s = h(s, u, c, l, e[n + 8], 7, 1770035416), u, c, e[n + 9], 12, -1958414417), s, u, e[n + 10], 17, -42063), l, s, e[n + 11], 22, -1990404162), c = h(c, l = h(l, s = h(s, u, c, l, e[n + 12], 7, 1804603682), u, c, e[n + 13], 12, -40341101), s, u, e[n + 14], 17, -1502002290), l, s, e[n + 15], 22, 1236535329), c = p(c, l = p(l, s = p(s, u, c, l, e[n + 1], 5, -165796510), u, c, e[n + 6], 9, -1069501632), s, u, e[n + 11], 14, 643717713), l, s, e[n], 20, -373897302), c = p(c, l = p(l, s = p(s, u, c, l, e[n + 5], 5, -701558691), u, c, e[n + 10], 9, 38016083), s, u, e[n + 15], 14, -660478335), l, s, e[n + 4], 20, -405537848), c = p(c, l = p(l, s = p(s, u, c, l, e[n + 9], 5, 568446438), u, c, e[n + 14], 9, -1019803690), s, u, e[n + 3], 14, -187363961), l, s, e[n + 8], 20, 1163531501), c = p(c, l = p(l, s = p(s, u, c, l, e[n + 13], 5, -1444681467), u, c, e[n + 2], 9, -51403784), s, u, e[n + 7], 14, 1735328473), l, s, e[n + 12], 20, -1926607734), c = d(c, l = d(l, s = d(s, u, c, l, e[n + 5], 4, -378558), u, c, e[n + 8], 11, -2022574463), s, u, e[n + 11], 16, 1839030562), l, s, e[n + 14], 23, -35309556), c = d(c, l = d(l, s = d(s, u, c, l, e[n + 1], 4, -1530992060), u, c, e[n + 4], 11, 1272893353), s, u, e[n + 7], 16, -155497632), l, s, e[n + 10], 23, -1094730640), c = d(c, l = d(l, s = d(s, u, c, l, e[n + 13], 4, 681279174), u, c, e[n], 11, -358537222), s, u, e[n + 3], 16, -722521979), l, s, e[n + 6], 23, 76029189), c = d(c, l = d(l, s = d(s, u, c, l, e[n + 9], 4, -640364487), u, c, e[n + 12], 11, -421815835), s, u, e[n + 15], 16, 530742520), l, s, e[n + 2], 23, -995338651), c = m(c, l = m(l, s = m(s, u, c, l, e[n], 6, -198630844), u, c, e[n + 7], 10, 1126891415), s, u, e[n + 14], 15, -1416354905), l, s, e[n + 5], 21, -57434055), c = m(c, l = m(l, s = m(s, u, c, l, e[n + 12], 6, 1700485571), u, c, e[n + 3], 10, -1894986606), s, u, e[n + 10], 15, -1051523), l, s, e[n + 1], 21, -2054922799), c = m(c, l = m(l, s = m(s, u, c, l, e[n + 8], 6, 1873313359), u, c, e[n + 15], 10, -30611744), s, u, e[n + 6], 15, -1560198380), l, s, e[n + 13], 21, 1309151649), c = m(c, l = m(l, s = m(s, u, c, l, e[n + 4], 6, -145523070), u, c, e[n + 11], 10, -1120210379), s, u, e[n + 2], 15, 718787259), l, s, e[n + 9], 21, -343485551), s = f(s, r), u = f(u, i), c = f(c, o), l = f(l, a);
                    return [s, u, c, l]
                }

                function c(e) {
                    var t, n = "", r = 32 * e.length;
                    for (t = 0; t < r; t += 8) n += String.fromCharCode(e[t >> 5] >>> t % 32 & 255);
                    return n
                }

                function l(e) {
                    var t, n = [];
                    for (n[(e.length >> 2) - 1] = void 0, t = 0; t < n.length; t += 1) n[t] = 0;
                    var r = 8 * e.length;
                    for (t = 0; t < r; t += 8) n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
                    return n
                }

                function r(e) {
                    var t, n, r = "0123456789abcdef", i = "";
                    for (n = 0; n < e.length; n += 1) t = e.charCodeAt(n), i += r.charAt(t >>> 4 & 15) + r.charAt(15 & t);
                    return i
                }

                function i(e) {
                    return unescape(encodeURIComponent(e))
                }

                function o(e) {
                    return c(u(l(t = i(e)), 8 * t.length));
                    var t
                }

                function a(e, t) {
                    return function (e, t) {
                        var n, r, i = l(e), o = [], a = [];
                        for (o[15] = a[15] = void 0, 16 < i.length && (i = u(i, 8 * e.length)), n = 0; n < 16; n += 1) o[n] = 909522486 ^ i[n], a[n] = 1549556828 ^ i[n];
                        return r = u(o.concat(l(t)), 512 + 8 * t.length), c(u(a.concat(r), 640))
                    }(i(e), i(t))
                }

                t.exports = function (e, t, n) {
                    return t ? n ? a(t, e) : r(a(t, e)) : n ? o(e) : r(o(e))
                }
            }, {}]
        }, {}, [4])(4)
    }), window.Raven && Raven.config("https://e11961f5786c45c49323d90d4ecae6bd@report.url.cn/sentry/2563", {ignoreErrors: []}).install()</script>
    <script>T.page_css_ready = Date.now(), window.IS_WEBCOURSE = !0</script>
    <link href="//7.idqqimg.com/edu/webcourse/assets/css/lib_2cd8aa8b.css" rel="stylesheet"
          onerror="__retryPlugin.call(this,event)" onload="__retryPlugin.call(this,event)">
    <link href="//7.idqqimg.com/edu/webcourse/assets/css/index_edcaccdd.css" rel="stylesheet"
          onerror="__retryPlugin.call(this,event)" onload="__retryPlugin.call(this,event)">
</head>
<body>
<script id="imweb-webpack-retry-head"></script>
<div class="ke_overlay pre" id="preloading">
    <div class="ke_overlay_content loading">
        <div class="ke_loading"></div>
    </div>
</div>
<div id="react-body" class="web"></div> <!--只在IE下注入ie_polyfill-->
<script>!function () {
    var i = window.location, o = i.href;
    "http:" === i.protocol && (i.protocol = "https:"), window.__rawUrl = o;
    if (/(iphone|ios|android|mini|mobile|mobi|Nokia|Symbian|iPod|iPad|Windows\s+Phone|MQQBrowser|wp7|wp8|UCBrowser7|UCWEB|360\s+Aphone\s+Browser)/i.test(navigator.userAgent)) {
        var e = o.match(/webcourse\/(\d+)\/(\d+)/);
        if (e && e[0]) var t = e[1], d = e[2]; else {
            var a = o.match(/[?#&](course_id|cid)=(\d+)/), r = o.match(/[?#&]term_id=(\d+)/);
            t = a && a[2], d = r && r[1]
        }
        var h = o.match(/[?#&]taid=(\d+)/), m = o.match(/[?#&]from=(\w+)/), c = o.match(/[?#&]lite=(\d+)/),
            s = o.match(/[?#&]vid=(\d+)/), w = o.match(/[?#&]live=(\d+)/), n = h && h[1], l = m && m[1], v = c && c[1],
            f = s && s[1], _ = w && w[1];
        if (v) if (n) q = "//m.ke.qq.com/m-core/taskList.html?_bid=167&_wv=3&cid=" + t + "&tid=" + d + "#taid=" + n + "&vid=" + f; else q = "//m.ke.qq.com/m-core/live.html?_bid=167&_wv=1&cid=" + t + "&term_id=" + d + "&from=" + l + "&lite=" + v; else if (_) var q = "//m.ke.qq.com/m-core/live.html?_bid=167&_wv=1&cid=" + t + "&term_id=" + d + "&taid=" + n + "&from=" + l + "&fr=2"; else var q = "//m.ke.qq.com/course/" + t + "?term_id=" + d + "&taid=" + n + "&_bid=167&_wv=1&from=" + l + "&fr=2";
        window.location.href = q
    }
    "ke.qq.com" !== i.host && (window.location.href = o.replace(i.host, "ke.qq.com")), i.hash = i.hash.replace(/\?.*/, "");
    var p = i.hash.match(/task_id=(.*?)(&|$)/), u = i.hash.match(/exam_id=(.*?)(&|$)/), k = /taid=/.test(i.hash),
        b = /vid=/.test(i.hash);
    p && !k && (window.location.hash += "&taid=" + p[1]), u && !b && (window.location.hash += "&vid=" + u[1]);
    var E = navigator.userAgent;
    window.isIE = -1 < E.indexOf("MSIE"), window.isIE11 = !!window.MSInputMethodContext && !!document.documentMode, (window.isIE || window.isIE11) && (window.location.href = "https://ke.qq.com/webcourse/upgrade.html" + i.search + i.hash)
}()</script>
<script>var BJ_REPORT = function (s) {
    function t(e) {
        var n = document.cookie.match(new RegExp("(^| )" + e + "=([^;]*)(;|$)"));
        return n ? decodeURIComponent(n[2]) : ""
    }

    if (s.BJ_REPORT) return s.BJ_REPORT;
    var c = [], r = {}, f = {
        id: 0,
        uin: 0,
        url: "",
        combo: 1,
        ext: null,
        level: 4,
        ignore: [],
        random: 1,
        delay: 1e3,
        submit: null,
        repeat: 5,
        fulllink: !1,
        tcode: null,
        initPv: !0,
        pvMsg: "!#imweb-badjs-pv#!",
        costomStringify: null,
        passMonitorId: !1
    }, o = "//badjs.qq.com/badjs", i = s.location.href, l = function (e, n) {
        return Object.prototype.toString.call(e) === "[object " + (n || "Object") + "]"
    }, p = function (e) {
        return "object" == typeof e && !!e
    }, a = (parseInt(t("uid_type"), 10), s.onerror);
    s.onerror = function (e, n, t, r, o) {
        var i = e;
        o && o.stack && (i = d(o)), l(i, "Event") && (i += i.type ? "--" + i.type + "--" + (i.target ? i.target.tagName + "::" + i.target.src : "") : "");
        var u = {msg: i, level: 4, target: n, rowNum: t, colNum: r};
        f.jsErrorMSID && (u.ext = {msid: f.jsErrorMSID}), S.push(u), _(), a && a.apply(s, arguments)
    };
    var d = function (e) {
        var n = e.stack.replace(/\n/gi, "").split(/\bat\b/).slice(0, 5).join("@").replace(/\?[^:]+/gi, ""),
            t = e.toString();
        return n.indexOf(t) < 0 && (n = t + "@" + n), n
    }, m = function (e) {
        if (!p(e)) return !0;
        var n = e.msg;
        return (r[n] = (parseInt(r[n], 10) || 0) + 1) > f.repeat
    }, v = function (e, n) {
        var t, r = [], o = [], i = [];
        if (p(e)) {
            if (e.level = e.level || f.level, !e.ext) {
                var u = null;
                switch (e.level) {
                    case 1:
                        u = f.debugMSID;
                        break;
                    case 2:
                        u = f.infoMSID;
                        break;
                    case 4:
                        u = f.errorMSID
                }
                u && (e.ext = {msid: u})
            }
            for (var s in e) {
                var a = e[s];
                if (null !== (t = a) && (l(t, "Number") || t)) {
                    if (p(a)) try {
                        a = f.customStringify ? f.customStringify(a) : JSON.stringify(a)
                    } catch (e) {
                        a = "[BJ_REPORT detect value stringify error] " + e.toString()
                    }
                    i.push(s + ":" + a), r.push(s + "=" + encodeURIComponent(a)), "id" !== s && o.push(s + "[" + n + "]=" + encodeURIComponent(a))
                }
            }
        }
        return [o.join("&"), i.join(","), r.join("&")]
    }, u = function (e) {
        (new Image).src = e.replace(f.url, o)
    }, g = function (e) {
        setTimeout(function () {
            !function (r) {
                if (f.submit) f.submit(r); else {
                    var e = n(r);
                    if (f.fulllink) {
                        var o = new XMLHttpRequest;
                        o.open("post", e.url), o.setRequestHeader("content-type", "application/json; charset=utf-8"), o.send(e.data), o.onload = function () {
                            var e, n, t = 200 <= (n = o.status) && n <= 299 || 304 === n;
                            if (t) try {
                                e = JSON.parse(o.responseText)
                            } catch (e) {
                            }
                            (!t || e && "number" == typeof e.err && 0 !== e.err) && u(r)
                        }
                    } else u(r)
                }
            }(e)
        }, 0)
    }, n = function (e) {
        var n = h(e), t = n[0], r = n[1], o = [];
        if (f.fulllink) {
            "string" == typeof r.msg && (r.msg = [r.msg], r.level = [r.level], r.ext && (r.ext = [r.ext]));
            for (var i = 0; i < r.msg.length; i++) {
                var u = {content: r.msg[i], level: +r.level[i]};
                if (r.ext && r.ext[i]) try {
                    var s = JSON.parse(r.ext[i]), a = parseInt(s, 10);
                    "number" == typeof a && a == a ? (u.ext = {msid: parseInt(s, 10)}, f.passMonitorId && (u.pass_fields = u.pass_fields || {}, u.pass_fields.monitor_id = s.toString())) : s.msid && (u.ext = {msid: parseInt(s.msid, 10)}, f.passMonitorId && (u.pass_fields = u.pass_fields || {}, u.pass_fields.monitor_id = s.msid.toString()))
                } catch (e) {
                }
                f.tcode && (u.cmd = f.tcode), o.push(u)
            }
            r = {id: r.id, uin: r.uin, from: r.from, msg: o}
        }
        return {url: t, data: f.customStringify ? f.customStringify(r) : JSON.stringify(r)}
    }, h = function (e) {
        for (var n = e.split("?"), t = n[0], r = {}, o = n[1].split("&"), i = 0; i < o.length; i++) {
            var u = o[i].split("="), s = decodeURIComponent(u[0]), a = decodeURIComponent(u[1] || ""),
                c = s.match(/\[\d+]$/);
            if (c) {
                var f = c[0].match(/\d+/g)[0], l = r[s = s.replace(c[0], "")] || [];
                l[f] = a, r[s] = l
            } else r[s] = a
        }
        return [t, r]
    }, y = [], R = 0, _ = function (e) {
        if (f.report) {
            for (; c.length;) {
                var n = !1, t = c.shift();
                if (!m(t)) {
                    var r = v(t, y.length);
                    if (l(f.ignore, "Array")) for (var o = 0, i = f.ignore.length; o < i; o++) {
                        var u = f.ignore[o];
                        if (l(u, "RegExp") && u.test(r[1]) || l(u, "Function") && u(t, r[1])) {
                            n = !0;
                            break
                        }
                    }
                    if (!n) {
                        if (t.id && t.id.toString() !== f.id.toString()) {
                            var s = (f.url || "/badjs") + "?uin=" + f.uin + "&from=" + encodeURIComponent(location.href) + "&";
                            g(s + r[2] + "&_t=" + +new Date)
                        } else f.combo ? y.push(r[0]) : g(f.report + r[2] + "&_t=" + +new Date);
                        f.onReport && f.onReport(f.id, t)
                    }
                }
            }
            if (y.length) {
                var a = function () {
                    clearTimeout(R), g(f.report + y.join("&") + "&count=" + y.length + "&_t=" + +new Date), R = 0, y = []
                };
                e ? a() : R || (R = setTimeout(a, f.delay))
            }
        }
    }, w = function (e, n) {
        var t = e;
        return p(e) ? t.level = n : t = {msg: e, level: n}, t
    }, I = function () {
        var e = parseInt(f.id, 10);
        f.report = (f.url || "/badjs") + "?id=" + e + "&uin=" + f.uin + "&from=" + encodeURIComponent(location.href) + "&"
    }, S = {
        push: function (e) {
            var n = location.href;
            if (n !== i && (S.report(), i = n, I()), Math.random() >= f.random) return S;
            var t = p(e) ? function (e) {
                try {
                    if (e.stack) {
                        var n = e.stack.match("https?://[^\n]+"), t = (n = n ? n[0] : "").match(":(\\d+):(\\d+)");
                        return t || (t = [0, 0, 0]), {
                            msg: d(e),
                            rowNum: t[1],
                            colNum: t[2],
                            target: n.replace(t[0], "")
                        }
                    }
                    return e.name && e.message && e.description ? {msg: f.customStringify ? f.customStringify(e) : JSON.stringify(e)} : e
                } catch (n) {
                    return e
                }
            }(e) : {msg: e};
            return f.ext && !t.ext && (t.ext = f.ext), c.push(t), _(), S
        }, report: function (e) {
            return e && S.push(e), _(!0), S
        }, error: function (e) {
            return e && (e = w(e, 4), S.push(e)), S
        }, info: function (e) {
            return e && (e = w(e, 2), S.push(e)), S
        }, debug: function (e) {
            return e && (e = w(e, 1), S.push(e)), S
        }, pv: function () {
            return S.info(f.pvMsg)
        }, init: function (e) {
            if (p(e)) for (var n in e) f[n] = e[n];
            return parseInt(f.id, 10) && (/qq\.com$/gi.test(location.hostname) && (f.url || (f.url = o), f.uin || (f.uin = t("uin") || t("uid_uin") || t("p_luin") || t("p_uin"))), f.tcode = t("im_t_c"), I(), f.initPv && S.pv()), S
        }, bjReq: function (e) {
            var n = v(e, 0),
                t = o + "?uin=" + f.uin + "&id=" + f.id + "&from=" + encodeURIComponent(location.href) + "&";
            (new Image).src = t + n[0]
        }, __onerror__: s.onerror
    };
    if ("undefined" != typeof console && console.error && setTimeout(function () {
        var e = ((location.hash || "").match(/([#&])BJ_ERROR=([^&$]+)/) || [])[2];
        e && console.error("BJ_ERROR", decodeURIComponent(e).replace(/(:\d+:\d+)\s*/g, "$1\n"))
    }, 0), window.onhashchange) {
        var x = window.onhashchange;
        window.onhashchange = function (e) {
            x(e), S.pv()
        }
    } else window.onhashchange = function () {
        S.pv()
    };
    return S
}(window);
"undefined" != typeof exports && ("undefined" != typeof module && module.exports && (exports = module.exports = BJ_REPORT), exports.BJ_REPORT = BJ_REPORT), function (i) {
    if (i.BJ_REPORT) {
        var r, o = function (e) {
            i.BJ_REPORT.error(e)
        }, n = i.BJ_REPORT.tryJs = function (e) {
            return e && (o = e), n
        }, t = function (e, n) {
            var t;
            for (t in n) e[t] = n[t]
        }, s = function (e) {
            return "function" == typeof e
        }, a = function (e, t) {
            return function () {
                try {
                    return e.apply(this, t || arguments)
                } catch (e) {
                    if (o(e), e.stack && console && console.error && console.error("[BJ-REPORT]", e.stack), !r) {
                        var n = i.onerror;
                        i.onerror = function () {
                        }, r = setTimeout(function () {
                            i.onerror = n, r = null
                        }, 50)
                    }
                    throw e
                }
            }
        }, u = function (o) {
            return function () {
                for (var e, n = [], t = 0, r = arguments.length; t < r; t++) e = arguments[t], s(e) && (e = a(e)), n.push(e);
                return o.apply(this, n)
            }
        }, e = function (r) {
            return function (e, n) {
                if ("string" == typeof e) try {
                    e = new Function(e)
                } catch (e) {
                    throw e
                }
                var t = [].slice.call(arguments, 2);
                return e = a(e, t.length && t), r(e, n)
            }
        }, c = function (i, u) {
            return function () {
                for (var e, n, t = [], r = 0, o = arguments.length; r < o; r++) e = arguments[r], s(e) && (e.tryWrap ? e.tryWrap : (n = a(e), e.tryWrap = n, e = n)), t.push(e);
                return i.apply(u || this, t)
            }
        }, f = function (e) {
            var n, t;
            for (n in e) t = e[n], s(t) && (e[n] = a(t));
            return e
        };
        n.spyJquery = function () {
            var e, o, t = i.$;
            if (!t || !t.event) return n;
            t.zepto ? (e = t.fn.on, o = t.fn.off, t.fn.on = c(e), t.fn.off = function () {
                for (var e, n = [], t = 0, r = arguments.length; t < r; t++) e = arguments[t], s(e) && e.tryWrap && (e = e.tryWrap), n.push(e);
                return o.apply(this, n)
            }) : window.jQuery && (e = t.event.add, o = t.event.remove, t.event.add = c(e), t.event.remove = function () {
                for (var e, n = [], t = 0, r = arguments.length; t < r; t++) e = arguments[t], s(e) && e.tryWrap && (e = e.tryWrap), n.push(e);
                return o.apply(this, n)
            });
            var r = t.ajax;
            return r && (t.ajax = function (e, n) {
                return n || (n = e, e = void 0), f(n), e ? r.call(t, e, n) : r.call(t, n)
            }), n
        }, n.spyModules = function () {
            var e = i.require, o = i.define;
            return o && o.amd && e && (i.require = u(e), t(i.require, e), i.define = u(o), t(i.define, o)), i.seajs && o && (i.define = function () {
                for (var e, n = [], t = 0, r = arguments.length; t < r; t++) e = arguments[t], s(e) && ((e = a(e)).toString = function (e) {
                    return function () {
                        return e.toString()
                    }
                }(arguments[t])), n.push(e);
                return o.apply(this, n)
            }, i.seajs.use = u(i.seajs.use), t(i.define, o)), n
        }, n.spySystem = function () {
            return i.setTimeout = e(i.setTimeout), i.setInterval = e(i.setInterval), n
        }, n.spyCustom = function (e) {
            return s(e) ? a(e) : f(e)
        }, n.spyAll = function () {
            return n.spyJquery().spyModules().spySystem(), n
        }
    }
}(window)</script>
<script>if (window.BJ_REPORT) {
    var BJ_REPORT = window.BJ_REPORT,
        ignores = ['"isTrigger":true,"namespace":"","namespace_re":null', "Query is not defined", "$ is not defined", "letv is not defined", "@ showTips", "Unexpected identifier after numeric literal", "缺少 ';'", "Expected ';'", "getQualityReportFronSafariAsync", "WebViewJavascriptBridge", "vi.l.qq.com", "vd.l.qq.com", "vm.gtimg.cn", "chrome-extension", "moz-extension", "NotSupportedError: Failed to construct:"];
    BJ_REPORT.init({
        id: 1414,
        ignore: [function (e) {
            var r = JSON.stringify(e.msg || e) || "";
            if (4 === e.level) for (var i = 0; i < ignores.length; i++) if (-1 < r.indexOf(ignores[i]) || -1 < r.indexOf(encodeURIComponent(ignores[i]))) return BJ_REPORT.info(e), !0;
            return !1
        }],
        repeat: 1,
        jsErrorMSID: 3233841,
        debugMSID: 3234595,
        infoMSID: 3234596,
        errorMSID: 3234597,
        fulllink: !0,
        url: "//report.edu.qq.com/data_report/web_report",
        passMonitorId: !0
    }), BJ_REPORT.tryJs().spyAll()
}</script> <!-- <script src="ie_polyfill?_ie"></script> --> <!--SCRIPT-->
<script id="imweb-webpack-retry-tail"></script>
<script>T.page_js_ready = Date.now(), window.__time__ = (new Date).getTime()</script>
<script>var _hmt = _hmt || [];
!function () {
    var e = document.createElement("script");
    e.src = "https://hm.baidu.com/hm.js?0c196c536f609d373a16d246a117fd44";
    var t = document.getElementsByTagName("script")[0];
    t.parentNode.insertBefore(e, t)
}()</script>
<script>
    !function () {
        var t = document.createElement("script"), e = document.getElementsByTagName("script")[0];
        t.src = "https:" === window.location.protocol ? "https://pingjs.qq.com/tcss.ping.https.js" : "http://pingjs.qq.com/tcss.ping.js", t.type = "text/javascript", t.onload = t.onerror = t.onreadystatechange = function () {
            /loaded|complete|undefined/.test(t.readyState) && (t.onload = t.onerror = t.onreadystatechange = null, t.parentNode.removeChild(t), t = void 0, "function" == typeof window.pgvMain && window.pgvMain())
        }, e.parentNode.insertBefore(t, e)
    }()
</script>
<script src="//7.idqqimg.com/edu/webcourse/assets/js/runtime_88cbb1b2.js" crossOrigin="anonymous"></script>
<script>if (!__JS_RETRY__["runtime_88cbb1b2.js"]) {
    document.write('\x3Cscript type="text/javascript" src="//ke.qq.com/webcourse/assets/js/runtime_88cbb1b2.js"  onerror="__retryPlugin.call(this,event)" onload="__retryPlugin.call(this,event)" retry>\x3C/script>');
    __rpJsReport('load fail ', 'FAIL_MSID', '//ke.qq.com/webcourse/assets/js/runtime_88cbb1b2.js')
} else {
    __rpJsReport('load success ', 'SUCC_MSID', '//ke.qq.com/webcourse/assets/js/runtime_88cbb1b2.js')
}</script>
<script src="//7.idqqimg.com/edu/webcourse/assets/js/polyfill_cf30b7fd.js" crossOrigin="anonymous"></script>
<script>if (!__JS_RETRY__["polyfill_cf30b7fd.js"]) {
    document.write('\x3Cscript type="text/javascript" src="//ke.qq.com/webcourse/assets/js/polyfill_cf30b7fd.js"  onerror="__retryPlugin.call(this,event)" onload="__retryPlugin.call(this,event)" retry>\x3C/script>');
    __rpJsReport('load fail ', 'FAIL_MSID', '//ke.qq.com/webcourse/assets/js/polyfill_cf30b7fd.js')
} else {
    __rpJsReport('load success ', 'SUCC_MSID', '//ke.qq.com/webcourse/assets/js/polyfill_cf30b7fd.js')
}</script>
<script src="//7.idqqimg.com/edu/webcourse/assets/js/twebrtc_56812417.js" crossOrigin="anonymous"></script>
<script>if (!__JS_RETRY__["twebrtc_56812417.js"]) {
    document.write('\x3Cscript type="text/javascript" src="//ke.qq.com/webcourse/assets/js/twebrtc_56812417.js"  onerror="__retryPlugin.call(this,event)" onload="__retryPlugin.call(this,event)" retry>\x3C/script>');
    __rpJsReport('load fail ', 'FAIL_MSID', '//ke.qq.com/webcourse/assets/js/twebrtc_56812417.js')
} else {
    __rpJsReport('load success ', 'SUCC_MSID', '//ke.qq.com/webcourse/assets/js/twebrtc_56812417.js')
}</script>
<script src="//7.idqqimg.com/edu/webcourse/assets/js/lib_7db27c73.js" crossOrigin="anonymous"></script>
<script>if (!__JS_RETRY__["lib_7db27c73.js"]) {
    document.write('\x3Cscript type="text/javascript" src="//ke.qq.com/webcourse/assets/js/lib_7db27c73.js"  onerror="__retryPlugin.call(this,event)" onload="__retryPlugin.call(this,event)" retry>\x3C/script>');
    __rpJsReport('load fail ', 'FAIL_MSID', '//ke.qq.com/webcourse/assets/js/lib_7db27c73.js')
} else {
    __rpJsReport('load success ', 'SUCC_MSID', '//ke.qq.com/webcourse/assets/js/lib_7db27c73.js')
}</script>
<script src="//7.idqqimg.com/edu/webcourse/assets/js/vendor_e2993a72.js" crossOrigin="anonymous"></script>
<script>if (!__JS_RETRY__["vendor_e2993a72.js"]) {
    document.write('\x3Cscript type="text/javascript" src="//ke.qq.com/webcourse/assets/js/vendor_e2993a72.js"  onerror="__retryPlugin.call(this,event)" onload="__retryPlugin.call(this,event)" retry>\x3C/script>');
    __rpJsReport('load fail ', 'FAIL_MSID', '//ke.qq.com/webcourse/assets/js/vendor_e2993a72.js')
} else {
    __rpJsReport('load success ', 'SUCC_MSID', '//ke.qq.com/webcourse/assets/js/vendor_e2993a72.js')
}</script>
<script src="//7.idqqimg.com/edu/webcourse/assets/js/react_298ccc2d.js" crossOrigin="anonymous"></script>
<script>if (!__JS_RETRY__["react_298ccc2d.js"]) {
    document.write('\x3Cscript type="text/javascript" src="//ke.qq.com/webcourse/assets/js/react_298ccc2d.js"  onerror="__retryPlugin.call(this,event)" onload="__retryPlugin.call(this,event)" retry>\x3C/script>');
    __rpJsReport('load fail ', 'FAIL_MSID', '//ke.qq.com/webcourse/assets/js/react_298ccc2d.js')
} else {
    __rpJsReport('load success ', 'SUCC_MSID', '//ke.qq.com/webcourse/assets/js/react_298ccc2d.js')
}</script>
<script src="//7.idqqimg.com/edu/webcourse/assets/js/index_3e444b70.js" crossOrigin="anonymous"></script>
<script>if (!__JS_RETRY__["index_3e444b70.js"]) {
    document.write('\x3Cscript type="text/javascript" src="//ke.qq.com/webcourse/assets/js/index_3e444b70.js"  onerror="__retryPlugin.call(this,event)" onload="__retryPlugin.call(this,event)" retry>\x3C/script>');
    __rpJsReport('load fail ', 'FAIL_MSID', '//ke.qq.com/webcourse/assets/js/index_3e444b70.js')
} else {
    __rpJsReport('load success ', 'SUCC_MSID', '//ke.qq.com/webcourse/assets/js/index_3e444b70.js')
}</script>
<script>"use strict";
var __register__sw__ = {
        version: "39263aedab4a6ace7d6f0c4a80578685",
        monitor: {
            support: 33593251,
            notSupport: 33593252,
            forceReload: 33593253,
            autoReload: 33593254,
            toHitCache: 33593255,
            hitCache: 33593256,
            cdnFailed: 33593257,
            trySuccess: 33593258,
            registerFailed: 33593259
        },
        checkSwStatusUrl: "//sas.qq.com/cgi-bin/ke_GrayStrategy_study",
        checkSwStatusPushId: "491",
        autoRefresh: !1
    }, monitorReport = function () {
        var i = "//tmapp.qq.com/cgi-bin/activity_platform/report/report_vm", r = 1e3, a = [];
        return function (t, o) {
            var e;
            t && ((e = t) && "[object Array]" === Object.prototype.toString.call(e) ? Object.keys(t).forEach(function (e) {
                t[e] && a.push({id: t[e], msg: o})
            }) : a.push({id: t, msg: o}), setTimeout(function () {
                !function () {
                    var e = new Image;
                    e.onload = e.onerror = function () {
                        e = null
                    };
                    for (var t = [], o = [], r = 0; r < a.length; r++) {
                        var n = a[r], s = n.id, n = n.msg;
                        t.push(s), o.push(n)
                    }
                    0 < a.length && (e.src = i + "?monitors=[" + t.join(",") + "]&_=" + o.join(",").substr(0, 1e3) + "&t=" + Math.random()), a = []
                }()
            }, r))
        }
    }(), badjsReport = function (e) {
        window.BJ_REPORT && window.BJ_REPORT.info(e)
    }, getCookie = function (e) {
        var t, e = new RegExp("(^| )" + e + "=([^;]*)(;|$)");
        return (t = document.cookie.match(e)) ? unescape(t[2]) : null
    }, version = __register__sw__.version, checkSwStatusUrl = __register__sw__.checkSwStatusUrl,
    checkSwStatusPushId = __register__sw__.checkSwStatusPushId, monitor = __register__sw__.monitor,
    autoRefresh = __register__sw__.autoRefresh;

function registerSw(o) {
    var a = navigator.serviceWorker;

    function c(e, t) {
        var o, r = e.isUseCache, n = e.reloadVersion, s = e.isRefresh, i = e.whiteUin, e = void 0 === i ? "" : i,
            i = getCookie("uin") || "", i = i[i.length - 1], i = -1 < e.indexOf(i), i = r && i;
        n && n !== version ? (monitorReport(monitor && monitor.forceReload), registerSw(!0)) : a.controller.postMessage(i), !t && i && (o = setInterval(function () {
            checkSwStatusPushId && window.imconnect && (clearInterval(o), window.imconnect(checkSwStatusPushId, {
                appId: "tencentedu",
                modId: "sas",
                version: 2,
                closeRegister: !1
            }).on("push", function (e) {
                e = e.data.body.result;
                a.controller && c(e, !0)
            }))
        }, 200)), t && s && window.location.reload()
    }

    a.register("/webcourse/sw.js").then(function (e) {
        badjsReport("sw注册成功:" + version), e.onupdatefound = function () {
            var t = e.installing;
            t.onstatechange = function () {
                var e;
                "activated" === t.state && a.controller && (o ? window.location.reload() : (console.log("New content is available; please refresh."), e = new Event("sw-refresh"), window.dispatchEvent(e)))
            }
        }, console.log("ServiceWorker registration successful with scope: ", e.scope)
    }).catch(function (e) {
        console.log("ServiceWorker registration failed: ", e), monitorReport(monitor && monitor.registerFailed), badjsReport("sw注册失败:" + e.message)
    }), checkSwStatusUrl && (o || fetch(checkSwStatusUrl).then(function (e) {
        return e.json()
    }).then(function (e) {
        a.controller && 0 == +e.retcode && c(e.result)
    }))
}

var isNotSupportBrowser = /QQBrowser/.test(navigator.userAgent) || /Android/.test(navigator.userAgent) || /Nexus/.test(navigator.userAgent);
"serviceWorker" in navigator && !isNotSupportBrowser ? (monitorReport(monitor && monitor.support), window.addEventListener("DOMContentLoaded", function () {
    autoRefresh && monitorReport(monitor && monitor.autoReload), registerSw(autoRefresh)
})) : monitorReport(monitor && monitor.notSupport);</script>
<script>"use strict";
!function () {
    var r, o, i,
        e = /QQBrowser/.test(navigator.userAgent) || /Android/.test(navigator.userAgent) || /Nexus/.test(navigator.userAgent);
    "serviceWorker" in navigator && navigator.serviceWorker && !e && (r = function (e) {
        e = document.cookie.match(new RegExp("(^| )" + e + "=([^;]*)(;|$)"));
        return e ? decodeURIComponent(e[2]) : ""
    }, o = function () {
        if (-1 !== ["2", "1001", "1002", "1012"].indexOf(r("uid_type"))) return r("uid_uin") || 0;
        var e = ["p_luin", "p_uin", "uin"], n = e.findIndex(function (e) {
            return r(e)
        });
        return 0 <= n ? parseInt(r(e[n]).replace(/[^\d]/g, ""), 10) : 0
    }, i = String(Date.now()) + String(~~(1e8 * Math.random())), window.addEventListener("DOMContentLoaded", function () {
        navigator.serviceWorker.register("/webcourse/edu_crash_report/sw.js").then(function (t) {
            t.active && (function e() {
                var n,
                    r = null !== (n = performance) && void 0 !== n && n.memory ? performance.memory.usedJSHeapSize >>> 20 : null;
                null !== (n = t.active) && void 0 !== n && n.postMessage({
                    pageID: i,
                    type: "live",
                    project: "study",
                    uin: o(),
                    url: location.href,
                    memory: r,
                    opername: "ketang-crash",
                    platform: 3,
                    bizId: "ke",
                    cmd: "index.html",
                    userAgent: navigator.userAgent
                }), setTimeout(function () {
                    e()
                }, 1e4)
            }(), window.addEventListener("beforeunload", function () {
                var e = null !== (e = performance) && void 0 !== e && e.memory ? performance.memory.usedJSHeapSize >>> 20 : null;
                t.active.postMessage({
                    pageID: i,
                    type: "unload",
                    project: "study",
                    uin: o(),
                    url: location.href,
                    memory: e,
                    opername: "ketang-crash",
                    platform: 3,
                    bizId: "ke",
                    cmd: "index.html",
                    userAgent: navigator.userAgent
                })
            }))
        })
    }))
}();
</script>
</body>
</html>